字符
普通字符:字母 数字 汉字 _ 等
特殊字符:点击查看
\d:数字0-9 \D:非数字 \s:空白符(空格 回车 tab) \S :非空白符 \w \W
^:匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置。
$:匹配输入的结束。如果多行标志被设置为 true,那么也匹配换行符前的位置。
*:匹配前一个表达式 0 次或多次。等价于 {0,}。
+:匹配前面一个表达式 1 次或者多次。等价于 {1,}。
?:匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。
.:(小数点)默认匹配除换行符之外的任何单个字符。如果 s (dotAll) 标志位被设为 true,它也会匹配换行符。
(x):像下面的例子展示的那样,它会匹配 x并且记住匹配项。其中括号被称为捕获括号。
(?:x):匹配 x 但是不记住匹配项。这种括号叫作非捕获括号
x(?=y):匹配x仅仅当x后面跟着y.这种叫做先行断言。
(?<=y)x:匹配x仅当x前面是y.这种叫做后行断言。
x(?!y):仅仅当x后面不跟着y时匹配x,这被称为正向否定查找。
(?<!y)x:仅仅当x前面不是y时匹配x,这被称为反向否定查找。
x|y:匹配x或者y。
{n}:n 是一个正整数,匹配了前面一个字符刚好出现了 n 次。比如, /a{2}/ 不会匹配“candy”中的a,但是会匹配“caandy”中所有的 a,以及“caaandy”中的前两个a。
{n,}:n是一个正整数,匹配前一个字符至少出现了n次。例如, /a{2,}/ 匹配 aa, aaaa 和 aaaaa 但是不匹配 a。
{n,m}:n 和m 都是整数。匹配前面的字符至少n次,最多m次。如果 n 或者m 的值是0, 这个值被忽略。
[xyz]:一个字符集合。匹配方括号中的任意字符,包括转义序列。你可以使用破折号-来指定一个字符范围。
[^xyz]:一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。你可以使用破折号-来指定一个字符范围。
[\b]:匹配一个退格(U+0008)。
\b:匹配一个词的边界。一个词的边界就是一个词不被另外一个字字符跟随的位置或者前面跟其他字字符的位置,例如在字母和空格之间。
\B:匹配一个非单词边界。匹配如下几种情况:
- 字符串第一个字符为非
字字符 - 字符串最后一个字符为非
字字符 - 两个单词字符之间
- 两个非单词字符之间
- 空字符串
\d:匹配一个数字。等价于[0-9]。
\D:匹配一个非数字字符。等价于[^0-9]。
\n 匹配一个换行符 (U+000A)。
\r 匹配一个回车符 (U+000D)。
\s 匹配一个空白字符,包括空格、制表符、换页符和换行符。
\S 匹配一个非空白字符。例如,/\S\w*/ 匹配foo bar.中的foo。
\t 匹配一个水平制表符 (U+0009)。
\v:匹配一个垂直制表符 (U+000B)。
\w:匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。例如,/\w/匹配 apple, 中的 a,$5.28,中的 5 和 3D. 中的 3。
\W:匹配一个非单字字符。
\n:在正则表达式中,它返回最后的第n个子捕获匹配的子字符串(捕获的数目以左括号计数)。比如/apple(,)\sorange\1/ 匹配apple, orange, cherry, peach.中的apple, orange, 。
如何创建正则表达式对象?
对象的构造函数写法
var reg = new RegExp(para1,para2); para需要写成字符串格式
para1:正则规则para2:规则属性g全局搜索。i不区分大小写搜索。m多行搜索。s允许 . 匹配换行符。u使用unicode码的模式进行匹配。y执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始。
语法糖(字面量)创建写法
其由包含在斜杠之间的模式组成,var reg = /para1/para2
正则表达式(RegExp)和字符串(String)的方法
str.match(regexp) 方法在字符串 str 中找到匹配 regexp 的字符。
- 如果
regexp不带有g标记,则它以数组的形式返回第一个匹配项,其中包含分组和属性index(匹配项的位置)、input(输入字符串,等于str) - 如果
regexp带有g标记,则它将所有匹配项的数组作为字符串返回,而不包含分组和其他详细信息。 - 如果没有匹配项,则无论是否带有标记
g,都将返回null。
str.matchAll(regexp) 是 str.match “新改进的”变体。
str.split(regexp|substr, limit)使用正则表达式(或子字符串)作为分隔符来分割字符串。
str.search(regexp) 返回第一个匹配项的位置,如果未找到,则返回 -1 ; 重要限制:search 仅查找第一个匹配项。
**str.replace(str|regexp, str|func)**当 replace 的第一个参数是字符串时,它仅替换第一个匹配项;第二个参数是一个替代字符串。我们可以在其中使用特殊字符;对于需要“智能”替换的场景,第二个参数可以是一个函数。
regexp.test(str) 查找匹配项,然后返回 true/false 表示是否存在。如果正则表达式带有标记 g,则 regexp.test 从 regexp.lastIndex 属性中查找,并更新此属性,可以用它从给定位置进行搜索
小问题
正则表达式引擎查找选择模式的时是挨个查找的。先匹配是否存在 Java,否则 —— 接着匹配 JavaScript 及其后的字符串。
- 变更匹配顺序,长的字符串优先匹配:
JavaScript|Java|C\+\+|C|PHP。 - 合并相同前缀:
Java(Script)?|C(\+\+)?|PHP。